%%
%% This is file `bitset.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% bitset.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2007 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version. The latest version of this license is in
%%    http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% This Current Maintainer of this work is Heiko Oberdiek.
%% 
%% This work consists of the main source file bitset.dtx
%% and the derived files
%%    bitset.sty, bitset.pdf, bitset.ins, bitset.drv, bitset-test1.tex,
%%    bitset-test2.tex, bitset-test3.tex.
%% 
\begingroup
  \catcode44 12 % ,
  \catcode45 12 % -
  \catcode46 12 % .
  \catcode58 12 % :
  \catcode64 11 % @
  \expandafter\let\expandafter\x\csname ver@bitset.sty\endcsname
  \ifcase 0%
    \ifx\x\relax % plain
    \else
      \ifx\x\empty % LaTeX
      \else
        1%
      \fi
    \fi
  \else
    \catcode35 6 % #
    \catcode123 1 % {
    \catcode125 2 % }
    \expandafter\ifx\csname PackageInfo\endcsname\relax
      \def\x#1#2{%
        \immediate\write-1{Package #1 Info: #2.}%
      }%
    \else
      \def\x#1#2{\PackageInfo{#1}{#2, stopped}}%
    \fi
    \x{bitset}{The package is already loaded}%
    \endgroup
    \expandafter\endinput
  \fi
\endgroup
\begingroup
  \catcode35 6 % #
  \catcode40 12 % (
  \catcode41 12 % )
  \catcode44 12 % ,
  \catcode45 12 % -
  \catcode46 12 % .
  \catcode47 12 % /
  \catcode58 12 % :
  \catcode64 11 % @
  \catcode123 1 % {
  \catcode125 2 % }
  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
    \def\x#1#2#3[#4]{\endgroup
      \immediate\write-1{Package: #3 #4}%
      \xdef#1{#4}%
    }%
  \else
    \def\x#1#2[#3]{\endgroup
      #2[{#3}]%
      \ifx#1\@undefined
        \xdef#1{#3}%
      \fi
      \ifx#1\relax
        \xdef#1{#3}%
      \fi
    }%
  \fi
\expandafter\x\csname ver@bitset.sty\endcsname
\ProvidesPackage{bitset}%
  [2007/09/28 v1.0 Data type bit set (HO)]
\begingroup
  \catcode123 1 % {
  \catcode125 2 % }
  \def\x{\endgroup
    \expandafter\edef\csname BitSet@AtEnd\endcsname{%
      \catcode35 \the\catcode35\relax
      \catcode64 \the\catcode64\relax
      \catcode123 \the\catcode123\relax
      \catcode125 \the\catcode125\relax
    }%
  }%
\x
\catcode35 6 % #
\catcode64 11 % @
\catcode123 1 % {
\catcode125 2 % }
\def\TMP@EnsureCode#1#2{%
  \edef\BitSet@AtEnd{%
    \BitSet@AtEnd
    \catcode#1 \the\catcode#1\relax
  }%
  \catcode#1 #2\relax
}
\TMP@EnsureCode{33}{12}% !
\TMP@EnsureCode{39}{12}% '
\TMP@EnsureCode{40}{12}% (
\TMP@EnsureCode{41}{12}% )
\TMP@EnsureCode{42}{12}% *
\TMP@EnsureCode{43}{12}% +
\TMP@EnsureCode{44}{12}% ,
\TMP@EnsureCode{45}{12}% -
\TMP@EnsureCode{46}{12}% .
\TMP@EnsureCode{47}{12}% /
\TMP@EnsureCode{58}{11}% : (letter!)
\TMP@EnsureCode{60}{12}% <
\TMP@EnsureCode{61}{12}% =
\TMP@EnsureCode{62}{12}% >
\TMP@EnsureCode{63}{14}% ? (comment!)
\TMP@EnsureCode{96}{12}% `
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname BitSet@TestMode\endcsname\relax
\else
  \catcode63=9 % ? (ignore)
\fi
? \let\BitSet@@TestMode\BitSet@TestMode
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
  \input infwarerr.sty\relax
  \input intcalc.sty\relax
  \input bigintcalc.sty\relax
\else
  \RequirePackage{infwarerr}[2007/09/09]%
  \RequirePackage{intcalc}[2007/09/27]%
  \RequirePackage{bigintcalc}[2007/09/27]%
\fi
\def\BitSet@MaxSize{2147483647}%
\def\BitSet@Empty{}
\def\BitSet@FirstOfOne#1{#1}
\def\BitSet@Gobble#1{}
\def\BitSet@FirstOfTwo#1#2{#1}
\def\BitSet@SecondOfTwo#1#2{#2}
\def\BitSet@Space{ }
\def\BitSet@ZapSpace#1 #2{%
  #1%
  \ifx\BitSet@Empty#2%
  \else
    \expandafter\BitSet@ZapSpace
  \fi
  #2%
}
\let\BitSet@Fi\fi
\def\BitSet@AfterFi#1#2\BitSet@Fi{\fi#1}
\def\BitSet@AfterFiFi#1#2\BitSet@Fi{\fi\fi#1}%
\def\BitSet@AfterFiFiFi#1#2\BitSet@Fi{\fi\fi\fi#1}%
\def\BitSet@IfUndefined#1{%
  \expandafter\ifx\csname BS@#1\endcsname\relax
    \expandafter\BitSet@FirstOfTwo
  \else
    \expandafter\BitSet@SecondOfTwo
  \fi
}
\def\BitSet@CheckIndex#1#2#3{%
  \BitSet@IfUndefined{#2}{\bitsetReset{#2}}{}%
  \expandafter\expandafter\expandafter\BitSet@@CheckIndex
  \intcalcNum{#3}!%
  {#2}{#1}%
}
\def\BitSet@@CheckIndex#1!#2#3{%
  \ifnum#1<0 %
    \BitSet@AfterFi{%
      \@PackageError{bitset}{%
        Invalid negative index (#1)%
      }\@ehc
    }%
  \else
    \BitSet@AfterFi{%
      #3{#2}{#1}%
    }%
  \BitSet@Fi
}
\def\bitsetReset#1{%
  \expandafter\def\csname BS@#1\endcsname{0}%
}
\def\bitsetLet#1#2{%
  \BitSet@IfUndefined{#2}{%
    \bitsetReset{#1}%
  }{%
    \expandafter\let\csname BS@#1\expandafter\endcsname
                    \csname BS@#2\endcsname
  }%
}
\def\bitsetSetBin#1#2{%
  \edef\BitSet@Temp{#2}%
  \edef\BitSet@Temp{%
    \expandafter\expandafter\expandafter\BitSet@ZapSpace
    \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty
  }%
  \edef\BitSet@Temp{%
    \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty
  }%
  \ifx\BitSet@Temp\BitSet@Empty
    \expandafter\let\csname BS@#1\endcsname\BitSet@Zero
  \else
    \expandafter\edef\csname BS@#1\endcsname{%
      \expandafter\BitSet@Reverse\BitSet@Temp!%
    }%
  \fi
}
\def\BitSet@KillZeros#1{%
  \ifx#10%
    \expandafter\BitSet@KillZeros
  \else
    #1%
  \fi
}
\def\BitSet@Reverse#1#2!{%
  \ifx\\#2\\%
    #1%
  \else
    \BitSet@AfterFi{%
      \BitSet@Reverse#2!#1%
    }%
  \BitSet@Fi
}
\def\bitsetSetOct{%
  \BitSet@SetOctHex\BitSet@FromFirstOct
}
\def\bitsetSetHex{%
  \BitSet@SetOctHex\BitSet@FromFirstHex
}
\def\BitSet@SetOctHex#1#2#3{%
  \edef\BitSet@Temp{#3}%
  \edef\BitSet@Temp{%
    \expandafter\expandafter\expandafter\BitSet@ZapSpace
    \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty
  }%
  \edef\BitSet@Temp{%
    \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty
  }%
  \ifx\BitSet@Temp\BitSet@Empty
    \expandafter\let\csname BS@#2\endcsname\BitSet@Zero
  \else
    \edef\BitSet@Temp{%
      \expandafter#1\BitSet@Temp!%
    }%
    \ifx\BitSet@Temp\BitSet@Empty
      \expandafter\let\csname BS@#2\endcsname\BitSet@Zero
    \else
      \expandafter\edef\csname BS@#2\endcsname{%
        \expandafter\BitSet@Reverse\BitSet@Temp!%
      }%
    \fi
  \fi
}
\def\BitSet@FromFirstOct#1{%
  \ifx#1!%
  \else
    \ifcase#1 \BitSet@AfterFiFi\BitSet@FromFirstOct
    \or 1%
    \or 10%
    \or 11%
    \or 100%
    \or 101%
    \or 110%
    \or 111%
    \else \BitSetError:WrongOctalDigit%
    \fi
    \expandafter\BitSet@FromOct
  \BitSet@Fi
}
\def\BitSet@FromOct#1{%
  \ifx#1!%
  \else
    \ifcase#1 000%
    \or 001%
    \or 010%
    \or 011%
    \or 100%
    \or 101%
    \or 110%
    \or 111%
    \else \BitSetError:WrongOctalDigit%
    \fi
    \expandafter\BitSet@FromOct
  \fi
}
\def\BitSet@FromFirstHex#1{%
  \ifx#1!%
  \else
    \ifx#10%
      \BitSet@AfterFiFi\BitSet@FromFirstHex
    \fi
    \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax
      \BitSetError:InvalidHexDigit%
    \else
      \expandafter\expandafter\expandafter\BitSet@KillZeros
      \csname BitSet@Hex#1\endcsname
    \fi
    \expandafter\BitSet@FromHex
  \BitSet@Fi
}
\def\BitSet@FromHex#1{%
  \ifx#1!%
  \else
    \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax
      \BitSetError:InvalidHexDigit%
    \else
      \csname BitSet@Hex#1\endcsname
    \fi
    \expandafter\BitSet@FromHex
  \fi
}
\def\BitSet@Temp#1{%
  \expandafter\def\csname BitSet@Hex#1\endcsname
}
\BitSet@Temp 0{0000}%
\BitSet@Temp 1{0001}%
\BitSet@Temp 2{0010}%
\BitSet@Temp 3{0011}%
\BitSet@Temp 4{0100}%
\BitSet@Temp 5{0101}%
\BitSet@Temp 6{0110}%
\BitSet@Temp 7{0111}%
\BitSet@Temp 8{1000}%
\BitSet@Temp 9{1001}%
\BitSet@Temp A{1010}%
\BitSet@Temp B{1011}%
\BitSet@Temp C{1100}%
\BitSet@Temp D{1101}%
\BitSet@Temp E{1110}%
\BitSet@Temp F{1111}%
\BitSet@Temp a{1010}%
\BitSet@Temp b{1011}%
\BitSet@Temp c{1100}%
\BitSet@Temp d{1101}%
\BitSet@Temp e{1110}%
\BitSet@Temp f{1111}%
\def\bitsetSetDec#1#2{%
  \edef\BitSet@Temp{#2}%
  \edef\BitSet@Temp{%
    \expandafter\expandafter\expandafter\BitSet@ZapSpace
    \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty
  }%
  \edef\BitSet@Temp{%
    \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty
  }%
  \ifx\BitSet@Temp\BitSet@Empty
    \expandafter\let\csname BS@#1\endcsname\BitSet@Zero
  \else
    \ifcase\bigintcalcSgn{\BitSet@Temp} %
      \expandafter\let\csname BS@#1\endcsname\BitSet@Zero
    \or
      \ifnum\bigintcalcCmp\BitSet@Temp\BitSet@MaxSize>0 %
        \expandafter\edef\csname BS@#1\endcsname{%
          \expandafter\BitSet@SetDecBig\BitSet@Temp!%
        }%
      \else
        \expandafter\edef\csname BS@#1\endcsname{%
          \expandafter\BitSet@SetDec\BitSet@Temp!%
        }%
      \fi
    \else
      \@PackageError{bitset}{%
        Bit sets cannot be negative%
      }\@ehc
    \fi
  \fi
}
\def\BitSet@SetDecBig#1#2#3#4#5#6#7#8#9!{%
  \ifx\\#9\\%
    \BitSet@SetDec#1#2#3#4#5#6#7#8!%
  \else
    \ifcase\BigIntCalcOdd#1#2#4#5#6#7#8#9! %
      0%
    \or
      1%
?   \else\BitSetError:ThisCannotHappen%
    \fi
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@SetDecBig
      \BigIntCalcShr#1#2#3#4#5#6#7#8#9!!%
    }%
  \BitSet@Fi
}
\def\BitSet@SetDec#1!{%
  \ifcase#1 %
  \or 1%
  \else
    \ifodd#1 %
      1%
    \else
      0%
    \fi
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@SetDec
      \IntCalcShr#1!!%
    }%
  \BitSet@Fi
}
\def\bitsetGetBin#1#2{%
  \romannumeral0%
  \expandafter\expandafter\expandafter\BitSet@@GetBin
  \intcalcNum{#2}!{#1}%
}
\def\BitSet@@GetBin#1!#2{%
  \BitSet@IfUndefined{#2}{%
    \ifnum#1>1 %
      \BitSet@AfterFi{%
        \expandafter\expandafter\expandafter\BitSet@Fill
        \IntCalcDec#1!!0%
      }%
    \else
      \BitSet@AfterFi{ 0}%
    \BitSet@Fi
  }{%
    \expandafter\expandafter\expandafter\BitSet@NumBinRev
    \expandafter\expandafter\expandafter1%
    \expandafter\expandafter\expandafter!%
    \csname BS@#2\endcsname!!#1!%
  }%
}
\def\BitSet@Fill#1!{%
  \ifnum#1>0 %
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@Fill
      \IntCalcDec#1!!0%
    }%
  \else
    \BitSet@AfterFi{ }%
  \BitSet@Fi
}
\def\BitSet@NumBinRev#1!#2#3!{%
  \ifx\\#3\\%
    \BitSet@AfterFi{%
      \BitSet@NumBinFill#1!#2%
    }%
  \else
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@NumBinRev
      \IntCalcInc#1!!#3!#2%
    }%
  \BitSet@Fi
}
\def\BitSet@NumBinFill#1!#2!#3!{%
  \ifnum#3>#1 %
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@Fill
      \IntCalcSub#3!#1!!#2%
    }%
  \else
    \BitSet@AfterFi{ #2}%
  \BitSet@Fi
}
\def\bitsetGetOct#1#2{%
  \romannumeral0%
  \bitsetIsEmpty{#1}{%
    \expandafter\expandafter\expandafter\BitSet@@GetOctHex
    \intcalcNum{#2}!3!230%
  }{%
    \expandafter\expandafter\expandafter\BitSet@@GetOct
    \expandafter\expandafter\expandafter1%
    \expandafter\expandafter\expandafter!%
    \expandafter\expandafter\expandafter!%
    \csname BS@#1\endcsname00%
    \BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}%
  }%
}
\def\bitsetGetHex#1#2{%
  \romannumeral0%
  \bitsetIsEmpty{#1}{%
    \expandafter\expandafter\expandafter\BitSet@@GetOctHex
    \intcalcNum{#2}!4!340%
  }{%
    \expandafter\expandafter\expandafter\BitSet@@GetHex
    \expandafter\expandafter\expandafter1%
    \expandafter\expandafter\expandafter!%
    \expandafter\expandafter\expandafter!%
    \csname BS@#1\endcsname000%
    \BitSet@Empty\BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}%
  }%
}
\def\BitSet@@GetOct#1!#2!#3#4#5{%
  \ifx#5\BitSet@Empty
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@GetOctHex
      \IntCalcDec#1!!#2!23%
    }%
  \else
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@@GetOct
      \number\IntCalcInc#1!\expandafter\expandafter\expandafter!%
      \csname BitSet@Oct#5#4#3\endcsname#2!%
    }%
  \BitSet@Fi
}
\def\BitSet@Temp#1#2#3#4{%
  \expandafter\def\csname BitSet@Oct#1#2#3\endcsname{#4}%
}
\BitSet@Temp0000%
\BitSet@Temp0011%
\BitSet@Temp0102%
\BitSet@Temp0113%
\BitSet@Temp1004%
\BitSet@Temp1015%
\BitSet@Temp1106%
\BitSet@Temp1117%
\def\BitSet@@GetHex#1!#2!#3#4#5#6{%
  \ifx#6\BitSet@Empty
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@GetOctHex
      \IntCalcDec#1!!#2!34%
    }%
  \else
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@@GetHex
      \number\IntCalcInc#1!\expandafter\expandafter\expandafter!%
      \csname BitSet@Hex#6#5#4#3\endcsname#2!%
    }%
  \BitSet@Fi
}
\def\BitSet@Temp#1#2#3#4#5{%
  \expandafter\def\csname BitSet@Hex#1#2#3#4\endcsname{#5}%
}
\BitSet@Temp00000%
\BitSet@Temp00011%
\BitSet@Temp00102%
\BitSet@Temp00113%
\BitSet@Temp01004%
\BitSet@Temp01015%
\BitSet@Temp01106%
\BitSet@Temp01117%
\BitSet@Temp10008%
\BitSet@Temp10019%
\BitSet@Temp1010A%
\BitSet@Temp1011B%
\BitSet@Temp1100C%
\BitSet@Temp1101D%
\BitSet@Temp1110E%
\BitSet@Temp1111F%
\def\BitSet@GetOctHex#1!#2!#3#4#5!#6{%
  \expandafter\BitSet@@GetOctHex
  \number\intcalcNum{#6}\expandafter\expandafter\expandafter!%
  \IntCalcMul#1!#4!!#3#4#2%
}
\def\BitSet@@GetOctHex#1!#2!#3#4{%
  \ifnum#1>#2 %
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\expandafter
      \expandafter\expandafter\expandafter\BitSet@Fill
      \expandafter\IntCalcDiv\number
      \expandafter\expandafter\expandafter\IntCalcAdd
      \IntCalcSub#1!#2!!#3!!#4!!%
    }%
  \else
    \BitSet@AfterFi{ }%
  \BitSet@Fi
}
\def\bitsetGetDec#1{%
  \romannumeral0%
  \BitSet@IfUndefined{#1}{ 0}{%
    \expandafter\expandafter\expandafter\BitSet@GetDec
    \csname BS@#1\endcsname!%
  }%
}
\def\BitSet@GetDec#1#2!{%
  \ifx\\#2\\%
    \BitSet@AfterFi{ #1}%
  \else
    \BitSet@AfterFi{%
      \BitSet@@GetDec2!#1!#2!%
    }%
  \BitSet@Fi
}
\def\BitSet@@GetDec#1!#2!#3#4!{%
  \ifx\\#4\\%
    \ifx#31%
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@Space
        \IntCalcAdd#1!#2!%
      }%
    \else
      \BitSet@AfterFiFi{ #2}%
    \fi
  \else
    \ifx#31%
      \BitSet@AfterFiFi{%
        \csname BitSet@N#1%
        \expandafter\expandafter\expandafter\endcsname
        \IntCalcAdd#1!#2!!#4!%
      }%
    \else
      \BitSet@AfterFiFi{%
        \csname BitSet@N#1\endcsname#2!#4!%
      }%
    \fi
  \BitSet@Fi
}
\def\BitSet@Temp#1#2{%
  \expandafter\def\csname BitSet@N#1\endcsname{%
    \BitSet@@GetDec#2!%
  }%
}
\BitSet@Temp{1}{2}
\BitSet@Temp{2}{4}
\BitSet@Temp{4}{8}
\BitSet@Temp{8}{16}
\BitSet@Temp{16}{32}
\BitSet@Temp{32}{64}
\BitSet@Temp{64}{128}
\BitSet@Temp{128}{256}
\BitSet@Temp{256}{512}
\BitSet@Temp{512}{1024}
\BitSet@Temp{1024}{2048}
\BitSet@Temp{2048}{4096}
\BitSet@Temp{4096}{8192}
\BitSet@Temp{8192}{16384}
\BitSet@Temp{16384}{32768}
\BitSet@Temp{32768}{65536}
\BitSet@Temp{65536}{131072}
\BitSet@Temp{131072}{262144}
\BitSet@Temp{262144}{524288}
\BitSet@Temp{524288}{1048576}
\BitSet@Temp{1048576}{2097152}
\BitSet@Temp{2097152}{4194304}
\BitSet@Temp{4194304}{8388608}
\BitSet@Temp{8388608}{16777216}
\BitSet@Temp{16777216}{33554432}
\BitSet@Temp{33554432}{67108864}
\BitSet@Temp{67108864}{134217728}
\BitSet@Temp{134217728}{268435456}
\BitSet@Temp{268435456}{536870912}
\BitSet@Temp{536870912}{1073741824}
\expandafter\def\csname BitSet@N1073741824\endcsname{%
  \BitSet@GetDecBig2147483648!%
}%
\def\BitSet@GetDecBig#1!#2!#3#4!{%
  \ifx\\#4\\%
    \ifx#31%
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@Space
        \BigIntCalcAdd#1!#2!%
      }%
    \else
      \BitSet@AfterFiFi{ #2}%
    \fi
  \else
    \ifx#31%
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@@GetDecBig
        \BigIntCalcAdd#1!#2!!#1!#4!%
      }%
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@GetDecBig
        \BigIntCalcShl#1!!#2!#4!%
      }%
    \fi
  \BitSet@Fi
}
\def\BitSet@@GetDecBig#1!#2!{%
  \expandafter\expandafter\expandafter\BitSet@GetDecBig
  \BigIntCalcShl#2!!#1!%
}
\def\bitsetAnd#1#2{%
  \bitsetIsEmpty{#1}{%
    \bitsetReset{#1}%
  }{%
    \bitsetIsEmpty{#2}{%
      \bitsetReset{#1}%
    }{%
      \expandafter\edef\csname BS@#1\endcsname{%
        \expandafter\expandafter\expandafter\BitSet@And
        \csname BS@#1\expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter!%
        \csname BS@#2\endcsname!!%
      }%
      \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty
        \bitsetReset{#1}%
      \fi
    }%
  }%
}
\def\BitSet@And#1#2!#3#4!#5!{%
  \ifx\\#2\\%
    \ifnum#1#3=11 #51\fi
  \else
    \ifx\\#4\\%
      \ifnum#1#3=11 #51\fi
    \else
      \ifnum#1#3=11 %
        #51%
        \BitSet@AfterFiFiFi{%
          \BitSet@And#2!#4!!%
        }%
      \else
        \BitSet@AfterFiFiFi{%
          \BitSet@And#2!#4!#50!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\bitsetAndNot#1#2{%
  \bitsetIsEmpty{#1}{%
    \bitsetReset{#1}%
  }{%
    \bitsetIsEmpty{#2}{%
    }{%
      \expandafter\edef\csname BS@#1\endcsname{%
        \expandafter\expandafter\expandafter\BitSet@AndNot
        \csname BS@#1\expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter!%
        \csname BS@#2\endcsname!!%
      }%
      \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty
        \bitsetReset{#1}%
      \fi
    }%
  }%
}
\def\BitSet@AndNot#1#2!#3#4!#5!{%
  \ifx\\#2\\%
    \ifnum#1#3=10 #51\fi
  \else
    \ifx\\#4\\%
      #5%
      \ifnum#1#3=10 1\else 0\fi
      #2%
    \else
      \ifnum#1#3=10 %
        #51%
        \BitSet@AfterFiFiFi{%
          \BitSet@AndNot#2!#4!!%
        }%
      \else
        \BitSet@AfterFiFiFi{%
          \BitSet@AndNot#2!#4!#50!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\bitsetOr#1#2{%
  \bitsetIsEmpty{#2}{%
    \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}%
  }{%
    \bitsetIsEmpty{#1}{%
      \expandafter\let\csname BS@#1\expandafter\endcsname
                      \csname BS@#2\endcsname
    }{%
      \expandafter\edef\csname BS@#1\endcsname{%
        \expandafter\expandafter\expandafter\BitSet@Or
        \csname BS@#1\expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter!%
        \csname BS@#2\endcsname!%
      }%
    }%
  }%
}
\def\BitSet@Or#1#2!#3#4!{%
  \ifnum#1#3>0 1\else 0\fi
  \ifx\\#2\\%
    #4%
  \else
    \ifx\\#4\\%
      #2%
    \else
      \BitSet@AfterFiFi{%
        \BitSet@Or#2!#4!%
      }%
    \fi
  \BitSet@Fi
}
\def\bitsetXor#1#2{%
  \bitsetIsEmpty{#2}{%
    \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}%
  }{%
    \bitsetIsEmpty{#1}{%
      \expandafter\let\csname BS@#1\expandafter\endcsname
                      \csname BS@#2\endcsname
    }{%
      \expandafter\edef\csname BS@#1\endcsname{%
        \expandafter\expandafter\expandafter\BitSet@Xor
        \csname BS@#1\expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter!%
        \csname BS@#2\endcsname!!%
      }%
      \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty
        \bitsetReset{#1}%
      \fi
    }%
  }%
}
\def\BitSet@Xor#1#2!#3#4!#5!{%
  \ifx\\#2\\%
    \ifx#1#3%
      \ifx\\#4\\%
      \else
        #50#4%
      \fi
    \else
      #51#4%
    \fi
  \else
    \ifx\\#4\\%
      #5%
      \ifx#1#30\else 1\fi
      #2%
    \else
      \ifx#1#3%
        \BitSet@AfterFiFiFi{%
          \BitSet@Xor#2!#4!#50!%
        }%
      \else
        #51%
        \BitSet@AfterFiFiFi{%
          \BitSet@Xor#2!#4!!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\bitsetShiftLeft#1#2{%
  \BitSet@IfUndefined{#1}{%
    \bitsetReset{#1}%
  }{%
    \bitsetIsEmpty{#1}{%
    }{%
      \expandafter\expandafter\expandafter\BitSet@ShiftLeft
      \intcalcNum{#2}!{#1}%
    }%
  }%
}
\def\BitSet@ShiftLeft#1!#2{%
  \ifcase\intcalcSgn{#1} %
  \or
    \begingroup
      \uccode`m=`0 %
    \uppercase\expandafter{\expandafter\endgroup
      \expandafter\edef\csname BS@#2\expandafter\endcsname
      \expandafter{%
        \romannumeral#1000\expandafter\BitSet@Space
        \csname BS@#2\endcsname
      }%
    }%
  \else
    \expandafter\BitSet@ShiftRight\BitSet@Gobble#1!{#2}%
  \fi
}
\def\bitsetShiftRight#1#2{%
  \BitSet@IfUndefined{#1}{%
    \bitsetReset{#1}%
  }{%
    \bitsetIsEmpty{#1}{%
    }{%
      \expandafter\expandafter\expandafter\BitSet@ShiftRight
      \intcalcNum{#2}!{#1}%
    }%
  }%
}
\def\BitSet@ShiftRight#1!#2{%
  \ifcase\intcalcSgn{#1} %
  \or
    \expandafter\edef\csname BS@#2\endcsname{%
      \expandafter\expandafter\expandafter\BitSet@Kill
      \csname BS@#2\expandafter\endcsname\expandafter\BitSet@Empty
      \expandafter=%
      \expandafter{\expandafter}\expandafter{\expandafter}%
      \romannumeral#1000!%
    }%
  \else
    \expandafter\BitSet@ShiftLeft\BitSet@Gobble#1!{#2}%
  \fi
}
\def\BitSet@Kill#1#2=#3#4#5{%
  #3#4%
  \ifx#5!%
    \ifx#1\BitSet@Empty
      0%
    \else
      #1#2%
    \fi
  \else
    \ifx#1\BitSet@Empty
      0%
      \BitSet@AfterFiFi\BitSet@Cleanup
    \else
      \BitSet@Kill#2=%
    \fi
  \BitSet@Fi
}
\def\bitsetClear{%
  \BitSet@CheckIndex\BitSet@Clear
}
\def\bitsetSet{%
  \BitSet@CheckIndex\BitSet@Set
}
\def\bitsetFlip{%
  \BitSet@CheckIndex\BitSet@Flip
}
\def\bitsetSetValue#1#2#3{%
  \expandafter\expandafter\expandafter\BitSet@SetValue
  \intcalcNum{#3}!{#1}{#2}%
}
\def\BitSet@SetValue#1!{%
  \BitSet@CheckIndex{%
    \ifcase#1 %
      \expandafter\BitSet@Clear
    \or
      \expandafter\BitSet@Set
    \else
      \BitSet@ErrorInvalidBitValue{#1}%
      \expandafter\expandafter\expandafter\BitSet@Gobble
      \expandafter\BitSet@Gobble
    \fi
  }%
}
\def\BitSet@ErrorInvalidBitValue#1{%
  \@PackageError{bitset}{%
    Invalid bit value (#1) not in range 0..1%
  }\@ehc
}
\def\BitSet@Clear#1#2{%
  \edef\BitSet@Temp{%
    \expandafter\expandafter\expandafter\BitSet@@Clear
    \csname BS@#1\expandafter\endcsname
    \expandafter\BitSet@Empty\expandafter=\expandafter!%
    \romannumeral#2000!%
  }%
  \expandafter\let\csname BS@#1\expandafter\endcsname
  \ifx\BitSet@Temp\BitSet@Empty
    \BitSet@Zero
  \else
    \BitSet@Temp
  \fi
}
\def\BitSet@@Clear#1#2=#3!#4{%
  \ifx#4!%
    \ifx#1\BitSet@Empty
    \else
      \ifx\BitSet@Empty#2%
      \else
        #30#2%
      \fi
    \fi
  \else
    \ifx#1\BitSet@Empty
      \BitSet@AfterFiFi\BitSet@Cleanup
    \else
      \ifx#10%
        \BitSet@AfterFiFiFi{%
          \BitSet@@Clear#2=#30!%
        }%
      \else
        #31%
        \BitSet@AfterFiFiFi{%
          \BitSet@@Clear#2=!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\BitSet@Set#1#2{%
  \expandafter\edef\csname BS@#1\endcsname{%
    \expandafter\expandafter\expandafter\BitSet@@Set
    \csname BS@#1\expandafter\endcsname
    \expandafter\BitSet@Empty\expandafter=%
    \expandafter{\expandafter}\expandafter{\expandafter}%
    \romannumeral#2000!%
  }%
}
\def\BitSet@@Set#1#2=#3#4#5{%
  #3#4%
  \ifx#5!%
    1#2%
  \else
    \ifx#1\BitSet@Empty
      0%
      \BitSet@AfterFiFi\BitSet@@@Set
    \else
      #1%
      \BitSet@@Set#2=%
    \fi
  \BitSet@Fi
}
\def\BitSet@@@Set#1{%
  \ifx#1!%
    1%
  \else
    0%
    \expandafter\BitSet@@@Set
  \fi
}
\def\BitSet@Flip#1#2{%
  \edef\BitSet@Temp{%
    \expandafter\expandafter\expandafter\BitSet@@Flip
    \csname BS@#1\expandafter\endcsname
    \expandafter\BitSet@Empty\expandafter=\expandafter!%
    \romannumeral#2000!%
  }%
  \expandafter\let\csname BS@#1\expandafter\endcsname
  \ifx\BitSet@Temp\BitSet@Empty
    \BitSet@Zero
  \else
    \BitSet@Temp
  \fi
}
\def\BitSet@@Flip#1#2=#3!#4{%
  \ifx#4!%
    \ifx#11%
      \ifx\BitSet@Empty#2%
      \else
        #30#2%
      \fi
    \else
      #31#2%
    \fi
  \else
    \ifx#1\BitSet@Empty
      #30%
      \BitSet@AfterFiFi\BitSet@@@Set
    \else
      \ifx#10%
        \BitSet@AfterFiFiFi{%
          \BitSet@@Flip#2=#30!%
        }%
      \else
        #31%
        \BitSet@AfterFiFiFi{%
          \BitSet@@Flip#2=!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\bitsetClearRange{%
  \BitSet@Range\BitSet@Clear
}
\def\bitsetSetRange{%
  \BitSet@Range\BitSet@Set
}
\def\bitsetFlipRange{%
  \BitSet@Range\BitSet@Flip
}
\def\bitsetSetValueRange#1#2#3#4{%
  \expandafter\expandafter\expandafter\BitSet@SetValueRange
  \intcalcNum{#4}!{#1}{#2}{#3}%
}
\def\BitSet@SetValueRange#1!#2#3#4{%
  \ifcase#1 %
    \BitSet@Range\BitSet@Clear{#2}{#3}{#4}%
  \or
    \BitSet@Range\BitSet@Set{#2}{#3}{#4}%
  \else
    \BitSet@ErrorInvalidBitValue{#1}%
  \fi
}
\def\BitSet@Range#1#2#3#4{%
  \edef\BitSet@Temp{%
    \noexpand\BitSet@@Range\noexpand#1{#2}%
    \intcalcNum{#3}!\intcalcNum{#4}!%
  }%
  \BitSet@Temp
}
\def\BitSet@@Range#1#2#3!#4!{%
  \ifnum#3<0 %
    \BitSet@NegativeIndex#1{#2}#3!#4!0!#4!%
  \else
    \ifnum#4<0 %
      \BitSet@NegativeIndex#1{#2}#3!#4!#3!0!%
    \else
      \ifcase\intcalcCmp{#3}{#4} %
      \or
        \@PackageError{bitset}{%
          Wrong index numbers in range [#3..#4]\MessageBreak% hash-ok
          for clear/set/flip on bit set `#2'.\MessageBreak
          The lower index exceeds the upper index.\MessageBreak
          Canceling the operation as error recovery%
        }\@ehc
      \else
        \BitSet@@@Range#3!#4!#1{#2}%
      \fi
    \fi
  \fi
}
\def\BitSet@NegativeIndex#1#2#3!#4!#5!#6!{%
  \@PackageError{bitset}{%
    Negative index in range [#3..#4]\MessageBreak % hash-ok
    for \string\bitset
    \ifx#1\BitSet@Clear
      Clear%
    \else
      \ifx#1\BitSet@Set
        Set%
      \else
        Flip%
      \fi
    \fi
    Range on bit set `#2'.\MessageBreak
    Using [#5..#6] as error recovery% hash-ok
  }\@ehc
  \BitSet@@Range#1{#2}#5!#6!%
}
\def\BitSet@@@Range#1!#2!#3#4{%
  \ifnum#1<#2 %
    #3{#4}{#1}%
    \BitSet@AfterFi{%
      \expandafter\expandafter\expandafter\BitSet@@@Range
      \IntCalcInc#1!!#2!#3{#4}%
    }%
  \BitSet@Fi
}
\def\bitsetGet#1#2{%
  \number
  \expandafter\expandafter\expandafter\BitSet@Get
  \intcalcNum{#2}!{#1}%
}
\def\BitSet@Get#1!#2{%
  \ifnum#1<0 %
    \BitSet@AfterFi{%
      0 \BitSetError:NegativeIndex%
    }%
  \else
    \BitSet@IfUndefined{#2}{0}{%
      \expandafter\expandafter\expandafter\BitSet@@Get
      \csname BS@#2\expandafter\endcsname
      \expandafter!\expandafter=%
      \expandafter{\expandafter}\expandafter{\expandafter}%
      \romannumeral\intcalcNum{#1}000!%
    }%
    \expandafter\BitSet@Space
  \BitSet@Fi
}
\def\BitSet@@Get#1#2=#3#4#5{%
  #3#4%
  \ifx#5!%
    \ifx#1!%
      0%
    \else
      #1%
    \fi
  \else
    \ifx#1!%
      0%
      \BitSet@AfterFiFi\BitSet@Cleanup
    \else
      \BitSet@@Get#2=%
    \fi
  \BitSet@Fi
}
\def\bitsetNextClearBit#1#2{%
  \number
  \expandafter\expandafter\expandafter\BitSet@NextClearBit
  \intcalcNum{#2}!{#1} %
}
\def\BitSet@NextClearBit#1!#2{%
  \ifnum#1<0 %
    \BitSet@NextClearBit0!{#2}%
    \BitSet@AfterFi{%
      \expandafter\BitSet@Space
      \expandafter\BitSetError:NegativeIndex\romannumeral0%
    }%
  \else
    \bitsetIsEmpty{#2}{#1}{%
      \expandafter\BitSet@Skip
      \number#1\expandafter\expandafter\expandafter!%
      \csname BS@#2\endcsname!!!!!!!!!=%
      {\BitSet@@NextClearBit#1!}%
    }%
  \BitSet@Fi
}
\def\BitSet@@NextClearBit#1!#2{%
  \ifx#2!%
    #1%
  \else
    \ifx#20%
      #1%
      \BitSet@AfterFiFi\BitSet@Cleanup
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@@NextClearBit
        \IntCalcInc#1!!%
      }%
    \fi
  \BitSet@Fi
}
\def\bitsetNextSetBit#1#2{%
  \number
  \expandafter\expandafter\expandafter\BitSet@NextSetBit
  \intcalcNum{#2}!{#1} %
}
\def\BitSet@NextSetBit#1!#2{%
  \ifnum#1<0 %
    \BitSet@NextSetBit0!{#2}%
    \BitSet@AfterFi{%
      \expandafter\BitSet@Space
      \expandafter\BitSetError:NegativeIndex\romannumeral0%
    }%
  \else
    \bitsetIsEmpty{#2}{-1}{%
      \expandafter\BitSet@Skip
      \number#1\expandafter\expandafter\expandafter!%
      \csname BS@#2\endcsname!!!!!!!!!=%
      {\BitSet@@NextSetBit#1!}%
    }%
  \BitSet@Fi
}
\def\BitSet@@NextSetBit#1!#2{%
  \ifx#2!%
    -1%
  \else
    \ifx#21%
      #1%
      \BitSet@AfterFiFi\BitSet@Cleanup
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@@NextSetBit
        \IntCalcInc#1!!%
      }%
    \fi
  \BitSet@Fi
}
\def\BitSet@Cleanup#1!{}
\def\BitSet@Skip#1!#2{%
  \ifx#2!%
    \BitSet@AfterFi{%
      \BitSet@SkipContinue%
    }%
  \else
    \ifcase#1 %
      \BitSet@AfterFiFi{%
        \BitSet@SkipContinue#2%
      }%
    \or
      \BitSet@AfterFiFi\BitSet@SkipContinue
    \or
      \BitSet@AfterFiFi{%
        \expandafter\BitSet@SkipContinue\BitSet@Gobble
      }%
    \else
      \ifnum#1>8 %
        \BitSet@AfterFiFiFi{%
          \expandafter\BitSet@Skip
          \number\IntCalcSub#1!8!\expandafter!%
          \BitSet@GobbleSeven
        }%
      \else
        \BitSet@AfterFiFiFi{%
          \expandafter\expandafter\expandafter\BitSet@Skip
          \IntCalcDec#1!!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\def\BitSet@SkipContinue#1!#2=#3{%
  #3#1!%
}
\def\BitSet@GobbleSeven#1#2#3#4#5#6#7{}
\def\bitsetGetSetBitList#1{%
  \romannumeral0%
  \bitsetIsEmpty{#1}{ }{%
    \expandafter\BitSet@GetSetBitList
    \number\BitSet@NextSetBit0!{#1}!{#1}{}!%
  }%
}
\def\BitSet@GetSetBitList#1!#2#3#4!{%
  \ifnum#1<0 %
    \BitSet@AfterFi{ #4}%
  \else
    \BitSet@AfterFi{%
      \expandafter\BitSet@GetSetBitList\number
      \expandafter\expandafter\expandafter\BitSet@NextSetBit
      \IntCalcInc#1!!{#2}!{#2},#4#3#1!%
    }%
  \BitSet@Fi
}
\def\bitsetSize#1{%
  \number
  \BitSet@IfUndefined{#1}{0 }{%
    \expandafter\expandafter\expandafter\BitSet@Size
    \expandafter\expandafter\expandafter1%
    \expandafter\expandafter\expandafter!%
    \csname BS@#1\endcsname!0!%
  }%
}
\def\BitSet@Size#1!#2#3!#4!{%
  \ifx#21%
    \ifx\\#3\\%
      \BitSet@AfterFiFi{#1 }%
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@Size
        \IntCalcInc#1!!#3!#1!%
      }%
    \fi
  \else
    \ifx\\#3\\%
      \BitSet@AfterFiFi{#4 }%
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@Size
        \IntCalcInc#1!!#3!#4!%
      }%
    \fi
  \fi
  \BitSet@Fi
}
\def\bitsetCardinality#1{%
  \number
  \BitSet@IfUndefined{#1}{0 }{%
    \expandafter\expandafter\expandafter\BitSet@Cardinality
    \expandafter\expandafter\expandafter0%
    \expandafter\expandafter\expandafter!%
    \csname BS@#1\endcsname!%
  }%
}
\def\BitSet@Cardinality#1!#2#3!{%
  \ifx#21%
    \ifx\\#3\\%
      \BitSet@AfterFiFi{\IntCalcInc#1! }%
    \else
      \BitSet@AfterFiFi{%
        \expandafter\expandafter\expandafter\BitSet@Cardinality
        \IntCalcInc#1!!#3!%
      }%
    \fi
  \else
    \ifx\\#3\\%
      \BitSet@AfterFiFi{#1 }%
    \else
      \BitSet@AfterFiFi{%
        \BitSet@Cardinality#1!#3!%
      }%
    \fi
  \fi
  \BitSet@Fi
}
\def\bitsetIsDefined#1{%
  \BitSet@IfUndefined{#1}%
  \BitSet@SecondOfTwo
  \BitSet@FirstOfTwo
}
\def\bitsetIsEmpty#1{%
  \BitSet@IfUndefined{#1}\BitSet@FirstOfTwo{%
    \expandafter\ifx\csname BS@#1\endcsname\BitSet@Zero
      \expandafter\BitSet@FirstOfTwo
    \else
      \expandafter\BitSet@SecondOfTwo
    \fi
  }%
}
\def\BitSet@Zero{0}
\def\bitsetQuery#1#2{%
  \ifnum\bitsetGet{#1}{#2}=1 %
    \expandafter\BitSet@FirstOfTwo
  \else
    \expandafter\BitSet@SecondOfTwo
  \fi
}
\def\bitsetEquals#1#2{%
  \BitSet@IfUndefined{#1}{%
    \BitSet@IfUndefined{#2}\BitSet@FirstOfTwo\BitSet@SecondOfTwo
  }{%
    \BitSet@IfUndefined{#2}\BitSet@SecondOfTwo{%
      \expandafter\ifx\csname BS@#1\expandafter\endcsname
                      \csname BS@#2\endcsname
        \expandafter\BitSet@FirstOfTwo
      \else
        \expandafter\BitSet@SecondOfTwo
      \fi
    }%
  }%
}
\def\bitsetIntersects#1#2{%
  \bitsetIsEmpty{#1}\BitSet@SecondOfTwo{%
    \bitsetIsEmpty{#2}\BitSet@SecondOfTwo{%
      \expandafter\expandafter\expandafter\BitSet@Intersects
      \csname BS@#1\expandafter\expandafter\expandafter\endcsname
      \expandafter\expandafter\expandafter!%
      \csname BS@#2\endcsname!%
    }%
  }%
}
\def\BitSet@Intersects#1#2!#3#4!{%
  \ifnum#1#3=11 %
    \BitSet@AfterFi\BitSet@FirstOfTwo
  \else
    \ifx\\#2\\%
      \BitSet@AfterFiFi\BitSet@SecondOfTwo
    \else
      \ifx\\#4\\%
        \BitSet@AfterFiFiFi\BitSet@SecondOfTwo
      \else
        \BitSet@AfterFiFiFi{%
          \BitSet@Intersects#2!#4!%
        }%
      \fi
    \fi
  \BitSet@Fi
}
\BitSet@AtEnd
\endinput
%%
%% End of file `bitset.sty'.
